home *** CD-ROM | disk | FTP | other *** search
- 1000 '
- 1010 '
- 1020 ' <<<<< P C - C O D E 1 >>>>>
- 1030 '
- 1040 '
- 1050 ' * * * * * * * * * * * * * * * * * * * *
- 1060 ' * *
- 1070 ' * COPYRIGHT in Public Domain 1983 *
- 1080 ' * by Richard N. Colvard *
- 1090 ' * *
- 1100 ' * WARNING: This Program must be *
- 1110 ' * Compiled with IBM *
- 1120 ' * BASCOM/T/O *
- 1130 ' * Donot use BASICA *
- 1140 ' * *
- 1150 ' * Highly recommend 8087 Link Libs *
- 1160 ' * *
- 1170 ' * * * * * * * * * * * * * * * * * * * *
- 1180 '
- 1190 '
- 1200 DIM B#(11), C#(47), CONS!(7), IX%(128)
- 1210 DIM ZI$(4), ZO$(4) ' Dummy dimensions for field stmst ND error
- 1220 CONS!(1)=8: CONS!(2)=131072! : CONS!(3)=8192: CONS!(4)=128
- 1230 CONS!(5)=2: CONS!(6)=32 : CONS!(7)=2048
- 1240 M%=7: N%=13: YY! = 999991! : MU# = 16807 : MD# = 2147483647#
- 1250 W1$="12345678901234567890123456789012345678901234567890123456789012345678"
- 1260 W2$=" 1 2 3 4 5 6"
- 1270 W3$=".........+.........+.........+.........+.........+.........+........"
- 1280 WZ$="P C C o m p u t e r S e c u r i t y V1.33 PC-CODE1"
- 1290 SCREEN 0,1
- 1300 COLOR 15,9,1
- 1310 FOR J%=1 TO 128
- 1320 IX%(J%)=129 - J%
- 1330 NEXT J%
- 1340 CLS
- 1350 FOR J%=10 TO 15
- 1360 COLOR J%,9,1
- 1370 PRINT "P C - C O D E 1 ......Binary SuperEncipherment......"
- 1380 NEXT J%
- 1390 COLOR 15,9,1
- 1400 PRINT " "
- 1410 PRINT " "
- 1420 PRINT " ": PRINT " "
- 1430 PRINT " ": PRINT " "
- 1440 PRINT " Enter the type of KEY desired"
- 1450 PRINT " Numeric; Number Only key ";
- 1460 COLOR 13,0,0: PRINT "N" : COLOR 15,9,1
- 1470 PRINT " Alphabetic; alphanumeric ";
- 1480 COLOR 13,0,0: PRINT "A" : COLOR 15,9,1
- 1490 INPUT " Enter N or A ", T$
- 1500 T$=LEFT$(T$,1)
- 1510 IF T$="a" THEN T$="A"
- 1520 IF T$="n" THEN T$="N"
- 1530 IF T$ <> "A" AND T$ <> "N" THEN 1490
- 1540 IF T$="N" THEN 1590
- 1550 IF T$="A" THEN 3440
- 1560 '
- 1570 '
- 1580 '
- 1590 CLS
- 1600 PRINT WZ$
- 1610 PRINT " "
- 1620 PRINT " "
- 1630 PRINT " There are two(2) levels of Security HIGH and LOW"
- 1640 INPUT " Enter H for HIGH or L for LOW ", A$
- 1650 A$=LEFT$(A$,1)
- 1660 IF A$ <> "H" AND A$ <> "h" AND A$ <> "L" AND A$ <> "l" THEN 1620
- 1670 IF A$ = "H" OR A$ = "h" THEN 1800
- 1680 '
- 1690 ' ----------- LOW level of SECURITY -------------
- 1700 '
- 1710 PRINT " LOW Level of Security Selected"
- 1720 PRINT " "
- 1730 PRINT " You must now enter SEVEN (7) KEY numbers as indicated:"
- 1740 PRINT " "
- 1750 GOSUB 3650
- 1760 GOTO 2340
- 1770 '
- 1780 '
- 1790 '
- 1800 PRINT " "
- 1810 PRINT " You have Selected HIGH security"
- 1820 PRINT " "
- 1830 PRINT " You must enter ";1+N%+M%;" key numbers between 1 and 2,147,483,646"
- 1840 INPUT " A( 1 ) ? ", A#
- 1850 IF A# < 1 OR A# >= MD# THEN GOSUB 2190: GOTO 1840
- 1860 PRINT " "
- 1870 '
- 1880 '
- 1890 FOR J%=1 TO M%
- 1900 PRINT " B(";J%;") ";
- 1910 INPUT B#(J%)
- 1920 IF B#(J%) < 1 OR B#(J%) >= MD# THEN GOSUB 2190: GOTO 1900
- 1930 NEXT J%
- 1940 CLS
- 1950 '
- 1960 '
- 1970 FOR J%=1 TO N%
- 1980 PRINT " C(";J%;") ";
- 1990 INPUT C#(J%)
- 2000 IF C#(J%) < 1 OR C#(J%) >= MD# THEN GOSUB 2190: GOTO 1980
- 2010 IF J% = 18 THEN CLS
- 2020 IF J% = 36 THEN CLS
- 2030 NEXT J%
- 2040 '
- 2050 GOTO 2340
- 2060 '
- 2070 '
- 2080 '
- 2090 PRINT "[";X%;"] ";
- 2100 INPUT "Enter a NUMBER between 1 and 9,999,999 ", K2!
- 2110 IF K2! < 1 OR K2! > 9999999! THEN GOSUB 2190: GOTO 2090
- 2120 Z!=K2!
- 2130 GOSUB 2280
- 2140 S!=Z!
- 2150 RETURN
- 2160 '
- 2170 '
- 2180 ' ---------- ERROR Messages ----------
- 2190 BEEP
- 2200 COLOR 4+16,0,0
- 2210 PRINT " ERROR: Number RANGE must be 1 to 9,999,999"
- 2220 COLOR 15,1,9
- 2230 BEEP
- 2240 RETURN
- 2250 '
- 2260 '
- 2270 ' ------ scaling ---------
- 2280 Z! = Z! / 100!
- 2290 IF Z! > 1! THEN 2280
- 2300 RETURN
- 2310 '
- 2320 '
- 2330 '
- 2340 CLS
- 2350 PRINT " "
- 2360 PRINT WZ$
- 2370 PRINT " "
- 2380 PRINT " ": PRINT " "
- 2390 PRINT " Input and Output File may be the same file"
- 2400 PRINT " Only Valid files; no use of 'CON:' or 'LPT1:'"
- 2410 PRINT " ":PRINT " "
- 2420 INPUT "Enter Output file name (Full name): ", U$
- 2430 OPEN "R",2,U$,512
- 2440 INPUT "Enter Input FILE (full name): ", F1$
- 2450 OPEN "R",1,F1$,512
- 2460 FIELD #1,128 AS ZI$(1),128 AS ZI$(2),128 AS ZI$(3),128 AS ZI$(4)
- 2470 FIELD #2,128 AS ZO$(1),128 AS ZO$(2),128 AS ZO$(3),128 AS ZO$(4)
- 2480 L!=LOF(1) : SIZE%=L!/128
- 2490 IF (SIZE% * 128!) <> L! THEN SIZE% = SIZE% + 1
- 2500 SIZ2% = L! / 512
- 2510 IF (SIZ2% * 512) <> L! THEN SIZ2% = SIZ2% + 1
- 2520 PRINT " "
- 2530 INPUT "Encode or Decode (E or D) ",EN$
- 2540 EN$=LEFT$(EN$,1)
- 2550 IF EN$ = "e" THEN EN$="E"
- 2560 IF EN$ = "d" THEN EN$="D"
- 2570 IF EN$ <> "D" AND EN$ <> "E" THEN 2530
- 2580 CLS: PRINT WZ$: PRINT " ": PRINT " "
- 2590 END$=STRING$(12,0)
- 2600 COLOR 4+16,0,0
- 2610 PRINT " * * * R U N N I N G * * *"
- 2620 COLOR 15,9,1
- 2630 PRINT " "
- 2640 LAST%=0
- 2650 FOR Z9% = 1 TO SIZ2%
- 2660 GET #1, Z9%
- 2670 GOSUB 5390
- 2680 FOR JK% = 1 TO 4
- 2690 M2$=STRING$(128,0)
- 2700 IF LIMIT% >= SIZE% THEN LSET ZO$(JK%)=M2$ : GOTO 2980
- 2710 M$=ZI$(JK%)
- 2720 IF EN$="D" AND LEFT$(M$,12)=END$ THEN 2980
- 2730 L%=LEN(M$)
- 2740 IF L% = 0 THEN 2960
- 2750 IF EN$="D" THEN GOSUB 5600
- 2760 FOR J%=1 TO L%
- 2770 H%=ASC( MID$(M$,J%,1))
- 2780 S#=A#
- 2790 L=M%
- 2800 GOSUB 3060
- 2810 A#=S#
- 2820 B%=O%
- 2830 L=N%
- 2840 S#=B#(B%)
- 2850 GOSUB 3060
- 2860 B#(B%)=S#
- 2870 B%=O%
- 2880 S#=C#(B%)
- 2890 L=256
- 2900 GOSUB 3060
- 2910 C#(B%)=S#
- 2920 H%=H% XOR O%
- 2930 MID$(M2$,J%,1)=CHR$(H% AND 255)
- 2940 NEXT J%
- 2950 IF EN$="E" THEN GOSUB 5730
- 2960 LSET ZO$(JK%) = M2$
- 2970 LAST% = LAST% + 1
- 2980 NEXT JK%
- 2990 PUT #2, Z9%
- 3000 NEXT Z9%
- 3010 '
- 3020 GOTO 3220
- 3030 '
- 3040 '
- 3050 ' -------- RANDOM NUMBER GENERATOR (1) ------
- 3060 S# = S# * MU#
- 3070 S# = S# - (MD# * INT( S# / MD# ) )
- 3080 O%=1 + INT(L * (S# / MD#) )
- 3090 IF LAST% >= SIZE% THEN 2990
- 3100 RETURN
- 3110 '
- 3120 '
- 3130 ' -------- RANDOM NUMBER GENERATOR (2) ------
- 3140 S!=(S! + 1.352968) ^ 1.256973
- 3150 S!=S! - FIX(S!)
- 3160 O%=1 + INT(L * S!)
- 3170 RETURN
- 3180 '
- 3190 '
- 3200 '
- 3210 ' ------- CLEAR STORAGE & PREPARE TO STOP ---------
- 3220 LSET ZO$(1)=SPACE$(128): LSET ZI$(1)=SPACE$(128)
- 3230 LSET ZO$(2)=SPACE$(128): LSET ZI$(2)=SPACE$(128)
- 3240 LSET ZO$(3)=SPACE$(128): LSET ZI$(3)=SPACE$(128)
- 3250 LSET ZO$(4)=SPACE$(128): LSET ZI$(4)=SPACE$(128)
- 3260 CLOSE 2
- 3270 CLOSE 1
- 3280 Z!=0: A#=0: M2$=SPACE$(128): M$=M2$ : S! = 0: S# = 0
- 3290 FOR J%=1 TO M%
- 3300 B#(J%)=0
- 3310 NEXT J%
- 3320 FOR J%=1 TO N%
- 3330 C#(J%)=0
- 3340 NEXT J%
- 3350 FOR J%=1 TO 128
- 3360 IX%(J%)=0
- 3370 NEXT J%
- 3380 COLOR 15,0,0
- 3390 CLS
- 3400 END ' S T O P
- 3410 '
- 3420 ' ----------- ALPHANUMERIC KEYS -----------
- 3430 '
- 3440 CLS
- 3450 PRINT WZ$
- 3460 PRINT " "
- 3470 PRINT " "
- 3480 PRINT " There are two(2) levels of Security HIGH and LOW"
- 3490 INPUT " Enter H for HIGH or L for LOW ", A$
- 3500 A$=LEFT$(A$,1)
- 3510 IF A$ <> "H" AND A$ <> "h" AND A$ <> "L" AND A$ <> "l" THEN 3470
- 3520 IF A$ = "H" OR A$ = "h" THEN 4730
- 3530 '
- 3540 ' ----------- LOW level of SECURITY -------------
- 3550 '
- 3560 PRINT " LOW Level of Security Selected"
- 3570 PRINT " "
- 3580 PRINT " You must now enter SEVEN (7) key Alphanumerics as indicated:"
- 3590 PRINT " "
- 3600 GOSUB 3650
- 3610 GOTO 2340
- 3620 '
- 3630 '
- 3640 ' ---------- KEY 1 ---------
- 3650 X%=1 : M% = 11 : N% = 47
- 3660 IF T$ = "A" THEN GOSUB 4860
- 3670 IF T$ = "N" THEN GOSUB 2090
- 3680 GOSUB 3140
- 3690 GOSUB 3140
- 3700 A#=FIX((1# - S!) * MD#)
- 3710 '
- 3720 '
- 3730 ' ---------- KEY 2 ----------
- 3740 X%=2
- 3750 IF T$ = "A" THEN GOSUB 4860
- 3760 IF T$ = "N" THEN GOSUB 2090
- 3770 GOSUB 3140
- 3780 L=4
- 3790 FOR J%=1 TO M%
- 3800 GOSUB 3140
- 3810 O2% = O%
- 3820 FOR K%=1 TO O2%
- 3830 GOSUB 3140
- 3840 NEXT K%
- 3850 GOSUB 3140
- 3860 B#(J%)=FIX((1# - S!) * MD#)
- 3870 NEXT J%
- 3880 '
- 3890 '
- 3900 ' ---------- KEY 3 -----------
- 3910 X%=3
- 3920 IF T$ = "A" THEN GOSUB 4860
- 3930 IF T$ = "N" THEN GOSUB 2090
- 3940 GOSUB 3140
- 3950 L=3
- 3960 FOR J%=1 TO N%
- 3970 GOSUB 3140
- 3980 O2% = O%
- 3990 FOR K%=1 TO O2%
- 4000 GOSUB 3140
- 4010 NEXT K%
- 4020 GOSUB 3140
- 4030 C#(J%)=FIX((1# - S!) * MD#)
- 4040 NEXT J%
- 4050 '
- 4060 '
- 4070 ' ---------- KEY 4 -------------
- 4080 X%=4
- 4090 IF T$ = "A" THEN GOSUB 4860
- 4100 IF T$ = "N" THEN GOSUB 2090
- 4110 GOSUB 3140
- 4120 L=INT(N%/2)
- 4130 GOSUB 3140
- 4140 K%=O% + 1
- 4150 L=N%
- 4160 FOR J%=1 TO K%
- 4170 GOSUB 3140
- 4180 L%=O%
- 4190 GOSUB 3140
- 4200 C#(L%)=FIX(S! * MD#)
- 4210 NEXT J%
- 4220 '
- 4230 '
- 4240 ' ----------- KEY 5 ---------------
- 4250 X%=5
- 4260 IF T$ = "A" THEN GOSUB 4860
- 4270 IF T$ = "N" THEN GOSUB 2090
- 4280 GOSUB 3140
- 4290 L=INT(M%/2)
- 4300 GOSUB 3140
- 4310 K%=O% + 1
- 4320 L=M%
- 4330 FOR J%=1 TO K%
- 4340 GOSUB 3140
- 4350 L%=O%
- 4360 GOSUB 3140
- 4370 B#(L%)=FIX(S! * MD#)
- 4380 NEXT J%
- 4390 '
- 4400 '
- 4410 ' ------------ KEY 6 ---------------
- 4420 X%=6
- 4430 IF T$ = "A" THEN GOSUB 4860
- 4440 IF T$ = "N" THEN GOSUB 2090
- 4450 GOSUB 3140
- 4460 L=M%
- 4470 FOR J%=1 TO M%
- 4480 GOSUB 3140
- 4490 D#=B#(O%)
- 4500 B#(O%)=B#(J%)
- 4510 B#(J%)=D#
- 4520 NEXT J%
- 4530 '
- 4540 '
- 4550 ' ------------- KEY 7 --------------
- 4560 X%=7
- 4570 IF T$ = "A" THEN GOSUB 4860
- 4580 IF T$ = "N" THEN GOSUB 2090
- 4590 GOSUB 3140
- 4600 L=N%
- 4610 FOR J%=1 TO N%
- 4620 GOSUB 3140
- 4630 D#=C#(O%)
- 4640 C#(O%)=C#(J%)
- 4650 C#(J%)=D#
- 4660 NEXT J%
- 4670 '
- 4680 RETURN
- 4690 '
- 4700 ' ---------- end of LOW security ------------
- 4710 '
- 4720 '
- 4730 CLS
- 4740 PRINT " You must enter 3 long PASSWORDS of alphanumeric data"
- 4750 X%=1
- 4760 GOSUB 5040
- 4770 X%=M%
- 4780 GOSUB 5040
- 4790 X%=N%
- 4800 GOSUB 5040
- 4810 '
- 4820 GOTO 2340
- 4830 '
- 4840 '
- 4850 ' --------- alphanumeric password to RND ------------
- 4860 PRINT "[";X%;"] Enter Password: ";
- 4870 LINE INPUT P$
- 4880 L%=LEN(P$)
- 4890 IF L% < 6 THEN PRINT " *** password too short; not > 5": GOTO 4860
- 4900 IF X% = 1 THEN K! = 1
- 4910 FOR J%=1 TO L%
- 4920 C%=ASC( MID$(P$,J%,1) )
- 4930 LL%=L%
- 4940 IF LL% > 7 THEN LL%= LL% - (7 * INT(LL%/7)): LL%=LL%+1
- 4950 K! = ABS(K! + (CONS!(LL%) * C%) )
- 4960 NEXT J%
- 4970 Z! = K!
- 4980 GOSUB 2270
- 4990 S! = Z!
- 5000 RETURN
- 5010 '
- 5020 '
- 5030 ' ------- alphanumeric to DECIMAL --------
- 5040 X2%=X% * 5
- 5050 IF X%=1 THEN PRINT " (A) Enter Password of at least (MIN) ";X2%;" Chars"
- 5060 IF X%=M% THEN PRINT " (B) Enter Password of at least (MIN) ";X2%;" Chars"
- 5070 IF X%=N% THEN PRINT " (C) Enter Password of at least (MIN) ";X2%;" Chars"
- 5080 PRINT " "
- 5090 PRINT " "; LEFT$(W2$,X2%)
- 5100 PRINT " "; LEFT$(W1$,X2%)
- 5110 PRINT " "; LEFT$(W3$,X2%)
- 5120 PRINT "Password:";
- 5130 LINE INPUT P$
- 5140 PRINT " "
- 5150 L%=LEN(P$)
- 5160 IF L% < X2% THEN PRINT " *** Password TOO SHORT reenter ": GOTO 5040
- 5170 T%=INT(L%/X%)
- 5180 IF X%=1 THEN K#=1
- 5190 FOR K%=1 TO X%
- 5200 P2$=LEFT$(P$,T%)
- 5210 IF L% < 1 THEN 5330
- 5220 P$=MID$(P$,T%+1,L%)
- 5230 L%=L%-T%
- 5240 FOR J%=1 TO T%
- 5250 LL%=J%
- 5260 IF LL% > 7 THEN LL%= LL% - (7 * INT(LL%/7)): LL%=LL%+1
- 5270 K# = K# + (CONS!(LL%) * C%)
- 5280 NEXT J%
- 5290 IF X%=1 THEN A#=K#
- 5300 IF X%=M% THEN B#(K%) = K#
- 5310 IF X%=N% THEN C#(K%) = K#
- 5320 K# = K# - (MD# * INT( K# / MD# ))
- 5330 NEXT K%
- 5340 RETURN
- 5350 '
- 5360 '
- 5370 ' ------ TRANSPOSITION -------
- 5380 '
- 5390 FOR JJ%=1 TO 64
- 5400 L=M%
- 5410 S#=A#
- 5420 GOSUB 3060
- 5430 A#=S#
- 5440 B%=O%
- 5450 L=N%
- 5460 S#=B#(B%)
- 5470 GOSUB 3060
- 5480 B#(B%)=S#
- 5490 B%=O%
- 5500 S#=C#(B%)
- 5510 L=128
- 5520 GOSUB 3060
- 5530 C#(B%)=S#
- 5540 SWAP IX%(JJ%),IX%(O%)
- 5550 NEXT JJ%
- 5560 RETURN
- 5570 '
- 5580 '
- 5590 '
- 5600 FOR JJ%=1 TO 64
- 5610 G1%=IX%(JJ%)
- 5620 G2%=IX%(JJ%+64)
- 5630 G1$=MID$(M$,G1%,1)
- 5640 G2$=MID$(M$,G2%,1)
- 5650 SWAP G1$,G2$
- 5660 MID$(M$,G1%,1)=G1$
- 5670 MID$(M$,G2%,1)=G2$
- 5680 NEXT JJ%
- 5690 RETURN
- 5700 '
- 5710 '
- 5720 '
- 5730 FOR JJ%=1 TO 64
- 5740 G1%=IX%(JJ%)
- 5750 G2%=IX%(JJ%+64)
- 5760 G1$=MID$(M2$,G1%,1)
- 5770 G2$=MID$(M2$,G2%,1)
- 5780 SWAP G1$,G2$
- 5790 MID$(M2$,G1%,1)=G1$
- 5800 MID$(M2$,G2%,1)=G2$
- 5810 NEXT JJ%
- 5820 RETURN
- 5830 '
- 5840 '
- 5850 '
- 5860 END
- WAP G1$,G2$
- 5790 MID$(M2$,G1%,1)=G1$
- 5800 MID$(M2$,G2%,1)=G2$
- 5810 NEXT JJ%
- 5820 RETUR